import { checkAndRefreshToken, logout, getToken } from './auth'
import { ElMessage } from 'element-plus'
import router from '@/router'

class TokenMonitor {
  constructor() {
    this.checkInterval = null
    this.checkIntervalMs = 5 * 60 * 1000 // 每5分钟检查一次
    this.isMonitoring = false
  }

  /**
   * 开始监控token
   */
  start() {
    if (this.isMonitoring) {
      return
    }

    this.isMonitoring = true
    
    // 立即检查一次
    this.checkToken()
    
    // 设置定时检查
    this.checkInterval = setInterval(() => {
      this.checkToken()
    }, this.checkIntervalMs)
    
    console.log('Token monitor started')
  }

  /**
   * 停止监控token
   */
  stop() {
    if (this.checkInterval) {
      clearInterval(this.checkInterval)
      this.checkInterval = null
    }
    this.isMonitoring = false
    console.log('Token monitor stopped')
  }

  /**
   * 检查token状态
   */
  async checkToken() {
    try {
      const token = getToken()
      if (!token) {
        // 没有token，停止监控
        this.stop()
        return
      }

      const isValid = await checkAndRefreshToken()
      if (!isValid) {
        // token无效，清除认证信息并跳转登录页
        this.handleTokenExpired()
      }
    } catch (error) {
      console.error('Token check failed:', error)
      this.handleTokenExpired()
    }
  }

  /**
   * 处理token过期
   */
  handleTokenExpired() {
    // 停止监控
    this.stop()
    
    // 清除认证信息
    logout()
    
    // 显示提示信息
    ElMessage.error('登录已过期，请重新登录')
    
    // 跳转到登录页
    if (router.currentRoute.value.path !== '/login') {
      router.push('/login')
    }
  }

  /**
   * 重置监控器
   */
  reset() {
    this.stop()
    this.start()
  }

  /**
   * 获取监控状态
   */
  getStatus() {
    return {
      isMonitoring: this.isMonitoring,
      checkIntervalMs: this.checkIntervalMs
    }
  }
}

// 创建全局实例
const tokenMonitor = new TokenMonitor()

export default tokenMonitor
